#include <iostream>




class Base
{
public:
    virtual void show() {}
};

class Derived : public Base
{
public:
    void show(){}
};

int main()
{
    //   C语言是弱类型的语言 : 强制类型转换 : 没有类型检查机制
    //   C++是强类型的语言 : 安全的类型转换p



    // 静态转换
    // 基础数据类型
    // 指针转换 : 不允许不同类型指针的转换  void* 和其他类型的指针
    
    // int a = 10;
    // void *p = &a;
    // double *b = static_cast<double*>(p);
    // std::cout<<b<<std::endl;


    // 可以父子指针的转换，不进行转换的安全检查

    //动态转换 : dynamic_cast   用于父子指针转换 : 在运行时进行判断，如果转换不安全会返回空指针
    //向下转型
    // Base *b = new Base;
    // Derived *d = new Derived;
    // Derived *p = dynamic_cast<Derived*>(b);
    // std::cout<<p<<std::endl;

    // Base *b1 = new Base;
    // Derived *d1 = new Derived;
    // Base *b2= dynamic_cast<Base*>(d1);
    // std::cout<<b2<<std::endl;

    // //常量转换
    // //const 转成非 const
    // const int a = 10;
    // int *p1 = const_cast<int*>(&a);
    // *p1 = 20;
    // std::cout<<a<<std::endl;


    // reinterpret_cast
    // 重解释转换 -> 强制类型转换
    //不推荐用
    int *a = new int(10);
    double *b = reinterpret_cast<double*>(a);

    return 0;
}